package com.sxj.shop.filter;

import com.sxj.shop.entity.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * 登录检查过滤器
 * 用户在访问登录、注册、主页相关功能时不需要校验
 * 访问其他所有功能均必须登录后才能访问,如果没有登录,直接跳转到登录页面,给出提示
 */
//@WebFilter("/*")
public class CheckLoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 用户在访问登录、注册、主页相关功能时不需要校验
        // 判断当前的请求是否与登录、注册、主页相关
        // 获取请求
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String path = request.getServletPath();
        // 如果是这些请求,则不做校验,直接放行
        if (path.endsWith(".user") || "/jsp/login.jsp".equals(path) || "/jsp/register.jsp".equals(path) || "/jsp/main.jsp".equals(path) || "/findAll.product".equals(path) || "/index.jsp".equals(path)) {
            // 直接放行
            filterChain.doFilter(servletRequest, servletResponse);
            // 结束
            return;
        }

        // 如果与上述请求不相关,则需要判断用户是否已经登录
        // 获取session中的用户信息
        User user = (User) request.getSession().getAttribute("user");
        if (user == null) {
            // 如果没有获取到,则说明用户没有登录
            request.setAttribute("loginMsg", "您尚未登录,请先登录后再访问该请求");
            request.getRequestDispatcher("/jsp/login.jsp").forward(request,servletResponse);
            return;
        }
        // 如果获取到用户信息了,则说明已经登录了,正常访问,直接放行
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
